home *** CD-ROM | disk | FTP | other *** search
- .text
- .globl _cache_off , _disable_mmu , _jump_to , _change_stack , _raise_int
- .globl _copy_kernel, _copy_kernel_end
-
- _raise_int:
- movew #0x3700,sr
- movec isp,d0
- movel d0,sp
- rts
-
- _cache_off:
- moveml d0-d2/a0-a2,sp@-
- movec cacr,d0
- bclr #0,d0
- bclr #8,d0
- movec d0,cacr
- moveml sp@+,d0-d2/a0-a2
- rts
-
- _disable_mmu:
- moveml d0-d2/a0-a2,sp@-
-
- pmove tc,mem
- movel #mem,a0
- movel a0@,d0
- bclr #31,d0
- movel d0,a0@
- pmove mem,tc
-
- movel #0,mem
- .word 0xf039, 0x0800; .long mem | pmove mem,tt0
- .word 0xf039, 0x0c00; .long mem | pmove mem,tt1
-
- moveml sp@+,d0-d2/a0-a2
- rts
-
- _jump_to:
- movel sp@(4),d0
- movel d0,a0
- jmp a0@
-
- _change_stack:
- movel a0,mem
- movel sp@,mem+4
- movel sp@(4),a0
- movel a0,usp
- movel a0,sp
- movel mem,a0
- movel mem+4,sp@-
- rts
-
-
- .data
-
- mem: .long 0,0
-
- .text
-
-
- | Register layout for copy_kernel:
- |
- | a6 = memptr
- | a5 = KSTART_MEM
- | a4 = ramdisk_addr
- | d7 = kexec.a_text + kexec.a_data
- | d6 = kexec.a_bss
- | d5 = rd_size
- |
- | a0 = src
- | a1 = dst
- | a2 = limit
- |
- | KSTART_MEM should be the real destination address, i.e. the 8 bytes
- | already added.
-
- _copy_kernel:
- | copy kernel text and data
- lea a6@(d5:l),a0
- movel a5,a1
- lea a0@(d7:l),a2
- 1: movel a0@+,a1@+
- cmpl a0,a2
- bhi 1b
-
- | clear kernel bss
- lea a5@(d7:l),a1
- lea a1@(d6:l),a2
- moveq #0,d0
- 1: movel d0,a1@+
- cmpl a1,a2
- bhi 1b
-
- | copy ramdisk contents
- cmpl #0,d5
- beq nord
- movel a6,a0
- movel a4,a1
- lea a0@(d5:l),a2
- 1: movel a0@+,a1@+
- cmpl a0,a2
- bhi 1b
-
- nord: | jump to kernel
- jmp a5@
-
- _copy_kernel_end:
-
-
-